/**
 * 格式化价格显示，特别处理小数点后有很多0的情况
 * 例如：
 * 0.0000001 -> $0.0₆10 (6用小字号显示，表示小数点后6个0)
 * 0.000012 -> $0.000012
 * 0.123456 -> $0.1235
 * 1.23 -> $1.23
 */
export function formatPrice(price: number): string {
  if (price <= 0) {
    return '$0.00';
  }

  // 对于大于等于 0.01 的价格，使用常规格式
  if (price >= 0.01) {
    return `$${price.toFixed(4)}`;
  }

  // 对于小于 0.01 的价格，检查连续0的个数
  const priceStr = price.toFixed(12); // 先转换为足够精度的字符串
  const parts = priceStr.split('.');
  
  if (parts.length !== 2) {
    return `$${price.toFixed(6)}`;
  }

  const decimalPart = parts[1];
  let zeroCount = 0;
  
  // 计算小数点后连续0的个数
  for (let i = 0; i < decimalPart.length; i++) {
    if (decimalPart[i] === '0') {
      zeroCount++;
    } else {
      break;
    }
  }

  // 如果连续0的个数大于等于4，使用压缩格式
  if (zeroCount >= 4) {
    const significantPart = decimalPart.substring(zeroCount);
    const firstTwoDigits = significantPart.substring(0, 2);
    // 使用 Unicode 下标字符来显示小字号的数字
    const subscriptNumbers = ['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉'];
    const subscriptZeroCount = zeroCount.toString().split('').map(d => subscriptNumbers[parseInt(d)]).join('');
    return `$0.0${subscriptZeroCount}${firstTwoDigits}`;
  }

  // 否则使用常规格式，显示适当的小数位数
  if (price < 0.001) {
    return `$${price.toFixed(8).replace(/0+$/, '')}`;
  }
  
  return `$${price.toFixed(6)}`;
}

/**
 * 格式化市值显示
 * 对于非常小的市值也使用相同的压缩格式
 */
export function formatMarketCap(marketCap: number): string {
  if (marketCap >= 1000000) {
    return `$${(marketCap / 1000000).toFixed(2)}M`;
  }
  if (marketCap >= 1000) {
    return `$${(marketCap / 1000).toFixed(2)}K`;
  }
  if (marketCap >= 1) {
    return `$${marketCap.toFixed(2)}`;
  }
  
  // 对于小于1的市值，使用与价格相同的格式化逻辑
  return formatPrice(marketCap);
}

/**
 * 格式化百分比变化
 */
export function formatPercentage(percentage: number): string {
  const formatted = percentage.toFixed(2);
  return `${percentage >= 0 ? '+' : ''}${formatted}%`;
}
